Join Helbreath
Would you like to react to this message? Create an account in a few clicks or log in to continue.


An essential info site for anyone learning the game. Great community and often very insightful posts.
 
HomeUseful information for Helbreath beginnersPlay, discover, and broadcast your Helbreath moments for free.Statistics overviewSearchMemberlistRulesRegisterLog in
 

 [CODE] /createitem Amount

Go down 
AuthorMessage
sleeq

sleeq

Posts : 21

[CODE] /createitem Amount Empty
PostSubject: [CODE] /createitem Amount   [CODE] /createitem Amount 9991011/21/2019, 10:24 am

Repost from old helbreath.online forum

Able to create multiple amounts of item at a time. However the structure is bit different from the old one.

/createitem RedPotion 20, will create 20 red pots
/createitem Dagger 3 65456451, will create 3 stated daggers

HGServer

Game.cpp

Find
Code:
void CGame::AdminOrder_CreateItem


Replace the whole code with this
Code:

// sleeq - adjusted to create multiple amount of item
// /createitem <name> <amount> <stats>
void CGame::AdminOrder_CreateItem(int iClientH, char *pData, DWORD dwMsgSize)
{
 char   seps[] = "= \t\n";
 char   * cp, * token, cBuff[256], cItemName[256], cData[256], cTemp[256], cAttribute[256], cValue[256];
 SYSTEMTIME SysTime;
 class  CStrTok * pStrTok;
 class  CItem * pItem;
 short  * sp;
 int    iRet, iTemp, iEraseReq, iValue, iAmount, i = 0;
 DWORD * dwp;
 WORD  * wp, wTemp;
 double dV1, dV2, dV3;
 
    if (m_pClientList[iClientH] == NULL) return;
    if (m_pClientList[iClientH]->m_bIsAdminCommandEnabled == FALSE) return;
   
    if ((dwMsgSize)    <= 0) return;

    if (m_pClientList[iClientH]->m_iAdminUserLevel < m_iAdminLevelCreateItem) {
        SendNotifyMsg(NULL, iClientH, DEF_NOTIFY_ADMINUSERLEVELLOW, NULL, NULL, NULL, NULL);
        return;
    }
   
    if (m_pClientList[iClientH]->m_bIsAdminCreateItemEnabled == FALSE) return;
   
    ZeroMemory(cBuff, sizeof(cBuff));
    memcpy(cBuff, pData, dwMsgSize);
    pStrTok = new class CStrTok(cBuff, seps);
    token = pStrTok->pGet();
    token = pStrTok->pGet();

    if (token != NULL) {
        ZeroMemory(cItemName, sizeof(cItemName));
        strcpy(cItemName, token);
    }

    iAmount = 0;
    token = pStrTok->pGet();
    if (token != NULL) {
        iAmount = atoi(token);
    }
    if (iAmount <= 0 || iAmount >= 50) iAmount = 1;

    ZeroMemory(cAttribute, sizeof(cAttribute));
    token = pStrTok->pGet();
    if (token != NULL) {
        ZeroMemory(cAttribute, sizeof(cAttribute));
        strcpy(cAttribute, token);
    }

    ZeroMemory(cValue, sizeof(cValue));
    iValue = 0;
    token = pStrTok->pGet();
    if (token != NULL) {
        ZeroMemory(cValue, sizeof(cValue));
        strcpy(cValue, token);
        iValue = atoi(cValue);
    }

    while (i < iAmount) {
        pItem = new class CItem;
        if (_bInitItemAttr(pItem, cItemName) == FALSE)
        {    delete pItem;
            return;    }
        if (strlen(cAttribute) != 0) {
            pItem->m_dwAttribute = atoi(cAttribute);
            if (pItem->m_dwAttribute == 1) {
                if ((iValue >= 1) && (iValue <= 200)) {
                    pItem->m_cItemColor = 2;
                    pItem->m_sItemSpecEffectValue2 = iValue - 100;
                               
                    dV2 = (double)pItem->m_sItemSpecEffectValue2;
                    dV3 = (double)pItem->m_wMaxLifeSpan;
                    dV1 = (dV2/100.0f)*dV3;

                    iTemp  = (int)pItem->m_wMaxLifeSpan;
                    iTemp += (int)dV1;

                    if (iTemp <= 0) wTemp = 1;
                    else wTemp = (WORD)iTemp;

                    if (wTemp <= pItem->m_wMaxLifeSpan*2) {
                        pItem->m_wMaxLifeSpan = wTemp;
                        pItem->m_sItemSpecEffectValue1 = (short)wTemp;
                        pItem->m_wCurLifeSpan = pItem->m_wMaxLifeSpan;
                    }
                    else pItem->m_sItemSpecEffectValue1 = (short)pItem->m_wMaxLifeSpan;
                }
                else pItem->m_dwAttribute = NULL;
            }
            else {
                if (pItem->m_sItemEffectType == DEF_ITEMEFFECTTYPE_ATTACK) {
                    switch ((pItem->m_dwAttribute & 0xF00000) >> 20) {
                    case 6:    pItem->m_cItemColor = 2; break;
                    case 8: pItem->m_cItemColor = 3; break;
                    case 1:    pItem->m_cItemColor = 5; break;
                    case 5:    pItem->m_cItemColor = 1; break;
                    case 3:    pItem->m_cItemColor = 7; break;
                    case 2:    pItem->m_cItemColor = 4; break;
                    case 7:    pItem->m_cItemColor = 6; break;
                    case 9:    pItem->m_cItemColor = 8; break;
                    }
                }
                else if (pItem->m_sItemEffectType == DEF_ITEMEFFECTTYPE_ATTACK_MANASAVE) {
                    switch ((pItem->m_dwAttribute & 0xF00000) >> 20) {
                    case 10: pItem->m_cItemColor = 5; break;
                    }
                }
            }
        }
       
        switch (pItem->m_sIDnum) {
        case 511:
        case 513:
        case 515:
        case 517:
        case 530:
        case 531:
        case 532:
        case 533:
        case 534:
            GetLocalTime(&SysTime);
            pItem->m_sTouchEffectType   = DEF_ITET_DATE;
            pItem->m_sTouchEffectValue1 = (short)SysTime.wMonth;
            pItem->m_sTouchEffectValue2 = (short)SysTime.wDay;
            pItem->m_sTouchEffectValue3 = 24 ;
            break;
        default:
            GetLocalTime(&SysTime);
            pItem->m_sTouchEffectType   = DEF_ITET_ID;
            pItem->m_sTouchEffectValue1 = iDice(1,100000);
            pItem->m_sTouchEffectValue2 = iDice(1,100000);
            ZeroMemory(cTemp, sizeof(cTemp));
            wsprintf(cTemp, "%d%2d",  (short)SysTime.wMonth, (short)SysTime.wDay);
            pItem->m_sTouchEffectValue3 = atoi(cTemp);
            break;
        }
   
       
        if (_bAddClientItemList(iClientH, pItem, &iEraseReq) == TRUE) {
            ZeroMemory(cData, sizeof(cData));
            dwp  = (DWORD *)(cData + DEF_INDEX4_MSGID);
            *dwp = MSGID_NOTIFY;
            wp   = (WORD *)(cData + DEF_INDEX2_MSGTYPE);
            *wp  = DEF_NOTIFY_ITEMOBTAINED;
           
            cp = (char *)(cData + DEF_INDEX2_MSGTYPE + 2);
           
            *cp = 1;
            cp++;
           
            memcpy(cp, pItem->m_cName, 20);
            cp += 20;
           
            dwp  = (DWORD *)cp;
            *dwp = pItem->m_dwCount;
            cp += 4;
           
            *cp = pItem->m_cItemType;
            cp++;
           
            *cp = pItem->m_cEquipPos;
            cp++;
           
            *cp = (char)0;
            cp++;
           
            sp  = (short *)cp;
            *sp = pItem->m_sLevelLimit;
            cp += 2;
           
            *cp = pItem->m_cGenderLimit;
            cp++;
           
            wp = (WORD *)cp;
            *wp = pItem->m_wCurLifeSpan;
            cp += 2;
           
            wp = (WORD *)cp;
            *wp = pItem->m_wWeight;
            cp += 2;
           
            sp  = (short *)cp;
            *sp = pItem->m_sSprite;
            cp += 2;
           
            sp  = (short *)cp;
            *sp = pItem->m_sSpriteFrame;
            cp += 2;
           
            *cp = pItem->m_cItemColor;
            cp++;

            *cp = (char)pItem->m_sItemSpecEffectValue2;
            cp++;
           
            dwp = (DWORD *)cp;
            *dwp = pItem->m_dwAttribute;
            cp += 4;

            if (iEraseReq == 1) {
                delete pItem;
                pItem = NULL ;
            }

            iRet = m_pClientList[iClientH]->m_pXSock->iSendMsg(cData, 53);
            i++;

            wsprintf(G_cTxt, "(%s) GM Order(%s): Create ItemName(%s)",m_pClientList[iClientH]->m_cIPaddress, m_pClientList[iClientH]->m_cCharName, cItemName);
            bSendMsgToLS(MSGID_GAMEMASTERLOG, iClientH, NULL,G_cTxt);
        } else {   
            delete pItem;
            return;
        }
    }
}
Back to top Go down
 
[CODE] /createitem Amount
Back to top 
Page 1 of 1

Permissions in this forum:You cannot reply to topics in this forum
Join Helbreath :: Open Source / Development Corner :: C++-
Jump to: