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.SearchRulesRegisterLog in
Share
 

 [CODE] /createitem Amount

Go down 
AuthorMessage
sleeq

sleeq


[CODE] /createitem Amount Empty
PostSubject: [CODE] /createitem Amount   [CODE] /createitem Amount EmptyThu 21 Nov 2019, 8: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: